<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 在一个函数的内部又定义了一个函数，这个定义在内部的函数就是闭包
        // 闭包就是能读取其他函数内部变量的函数
        // 闭包是在某个作用域内定义的函数，该函数可以访问这个作用域内的所有变量
        // 从作用上来说,闭包就是将函数内部和函数外部连接起来的一座桥梁


        // function f1() {
        //     console.log('555');
        //     function f2() {  //这里的f2就是闭包
        //         console.log(222);

        //     }
        //     return f2;
        // }
        // f1();


        //闭包可以让变量的值始终保存在内存中（不会被垃圾回收器回收）
        // function index() {
        //     var a = 1  //当函数被调用后a会被销毁，因此下次调用函数时会重新定义a的值为1，不会实现a++的效果
        //     console.log(a++);
        // }
        // var fu = index;
        // fu();
        // fu();
        // fu();
        // fu();
        
        function f1(){
            var n = 1
            function f2(){
                console.log(n++);
            }
            return f2;//此处不加小括号
        }
        //调用f1函数，返回值为函数f2
        var fn =f1();// 必须定义一个变量来接收f2函数
        fn();
        fn();
        fn();
        fn();

        
        //由于闭包会使函数中的局部变量一直保存在内存中，内存消耗会比较大

        

    </script>
</head>

<body>

</body>

</html>